const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
const MessageService = require('./services/messageService');
const { exec } = require('child_process');

// 创建消息服务实例
const messageService = new MessageService();

// 主窗口引用
let mainWindow = null;

// 默认回复配置
let replyConfig = {
    keywords: {
        '配送': '您好，我们会在30分钟内为您配送，请耐心等待。',
        '退款': '您好，我们已收到您的退款申请，会尽快处理。',
        '价格': '您好，商品价格都是明码标价的，您可以在商品详情页查看具体价格。',
        '优惠': '您好，我们店铺经常会有优惠活动，您可以关注我们的店铺获取最新优惠信息。'
    },
    defaultReplies: [
        '您好，请问有什么可以帮您？',
        '感谢您的咨询，我们会尽快回复您。',
        '您好，很高兴为您服务。',
        '您好，请问您需要什么帮助？',
        '您好，有什么可以为您效劳的？'
    ]
};

/**
 * 清理相关进程
 * @returns {Promise<void>}
 */
async function cleanup() {
    try {
        // 停止消息服务
        if (messageService) {
            await messageService.stop();
        }

        // 根据操作系统执行不同的清理命令
        const platform = process.platform;
        let command;
        if (platform === 'darwin') {
            command = 'pkill -f "Google Chrome"';
        } else if (platform === 'win32') {
            command = 'taskkill /F /IM chrome.exe /T';
        } else {
            command = 'pkill -f "google-chrome"';
        }

        // 执行清理命令
        await new Promise((resolve, reject) => {
            exec(command, (error, stdout, stderr) => {
                if (error) {
                    console.error('清理进程时出错:', error);
                    reject(error);
                } else {
                    resolve();
                }
            });
        });
    } catch (error) {
        console.error('清理进程时出错:', error);
    }
}

/**
 * 创建主窗口
 */
function createWindow() {
    mainWindow = new BrowserWindow({
        width: 1200,
        height: 800,
        minWidth: 800,
        minHeight: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false
        },
        // Windows 特定的窗口设置
        frame: true,
        titleBarStyle: 'default',
        backgroundColor: '#ffffff',
        // 添加窗口图标
        icon: path.join(__dirname, 'assets/icon.ico')
    });

    mainWindow.loadFile('index.html');
    
    // 设置主窗口
    messageService.setMainWindow(mainWindow);

    // 开发时打开开发者工具
    if (process.env.NODE_ENV === 'development') {
        mainWindow.webContents.openDevTools();
    }

    // 处理窗口最小化事件
    mainWindow.on('minimize', () => {
        mainWindow.webContents.send('window-minimized');
    });

    // 处理窗口恢复事件
    mainWindow.on('restore', () => {
        mainWindow.webContents.send('window-restored');
    });

    // 处理窗口关闭事件
    mainWindow.on('close', async (event) => {
        // 阻止默认关闭行为
        event.preventDefault();
        
        try {
            // 执行清理操作
            await cleanup();
            // 关闭窗口
            mainWindow.destroy();
        } catch (error) {
            console.error('关闭窗口时出错:', error);
            // 确保窗口最终被关闭
            mainWindow.destroy();
        }
    });

    // 监听窗口关闭事件
    mainWindow.on('closed', () => {
        mainWindow = null;
        messageService.setMainWindow(null);
    });
}

app.whenReady().then(() => {
    createWindow();

    // 处理开始监控请求
    ipcMain.on('start-monitoring', async () => {
        try {
            // 检查浏览器状态
            if (!messageService.isBrowserReady) {
                mainWindow.webContents.send('log-message', '浏览器未就绪，请先启动浏览器', 'error');
                mainWindow.webContents.send('status-update', false);
                return;
            }

            // 检查是否已经在监控中
            if (messageService.isMonitoring) {
                mainWindow.webContents.send('log-message', '监控已经在运行中', 'warning');
                return;
            }

            // 开始监控
            mainWindow.webContents.send('log-message', '开始监控消息...', 'info');
            await messageService.monitorMessages();
            
        } catch (error) {
            console.error('开始监控失败:', error);
            mainWindow.webContents.send('log-message', `开始监控失败: ${error.message}`, 'error');
            mainWindow.webContents.send('status-update', false);
        }
    });

    // 处理停止监控请求
    ipcMain.on('stop-monitoring', async () => {
        try {
            if (!messageService.isMonitoring) {
                mainWindow.webContents.send('log-message', '监控已经停止', 'warning');
                return;
            }

            await messageService.stopMonitoring();
            mainWindow.webContents.send('status-update', false);
            mainWindow.webContents.send('log-message', '已停止监控', 'success');
        } catch (error) {
            console.error('停止监控失败:', error);
            mainWindow.webContents.send('log-message', `停止监控失败: ${error.message}`, 'error');
        }
    });

    // 转发日志消息到渲染进程
    ipcMain.on('log-message', (event, message, type) => {
        if (mainWindow && !mainWindow.isDestroyed()) {
            mainWindow.webContents.send('log-message', message, type);
        }
    });

    // 监听获取回复配置的请求
    ipcMain.on('get-reply-config', (event) => {
        if (mainWindow && !mainWindow.isDestroyed()) {
            mainWindow.webContents.send('reply-config', replyConfig);
        }
    });

    // 监听更新回复配置的请求
    ipcMain.on('update-reply-config', (event, newConfig) => {
        replyConfig = newConfig;
        if (mainWindow && !mainWindow.isDestroyed()) {
            mainWindow.webContents.send('reply-config-updated', true);
        }
    });

    // 监听启动浏览器请求
    ipcMain.on('start-browser', async () => {
        try {
            // 执行启动Chrome的脚本
            exec('sh scripts/start_chrome.sh', (error, stdout, stderr) => {
                if (error) {
                    console.error('启动Chrome失败:', error);
                    mainWindow.webContents.send('browser-ready', false);
                    return;
                }
                console.log('Chrome启动成功');
            });

            // 等待一段时间确保Chrome启动完成
            await new Promise(resolve => setTimeout(resolve, 5000));

            // 启动消息服务
            await messageService.startBrowser();
            
        } catch (error) {
            console.error('启动浏览器失败:', error);
            mainWindow.webContents.send('browser-ready', false);
        }
    });
});

// 监听所有窗口关闭事件
app.on('window-all-closed', async () => {
    await cleanup();
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

// 监听应用退出事件
app.on('before-quit', async () => {
    await cleanup();
});

// 监听激活事件
app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
        createWindow();
    }
}); 